package com.lonely.fx.bind;

import javafx.beans.property.SimpleListProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

/**
 * @date: 2022-07-23 17:33
 * @author: ztkj-hzb
 * @description: 基于List类型的单向绑定
 **/
public class BindWithListSettingMain {


    public static void main(String[] args) {

        ObservableList<String> list1 = FXCollections.observableArrayList();
        list1.addAll("A", "B");
        SimpleListProperty<String> listProperty1 = new SimpleListProperty<>(list1);


        ObservableList<String> list2 = FXCollections.observableArrayList();
        list2.addAll("A", "B");
        SimpleListProperty<String> listProperty2 = new SimpleListProperty<>(list2);

        System.out.println(String.format("listProperty1: %s , listProperty2: %s", listProperty1.get(), listProperty2.get()));


        //绑定
//        listProperty1.bind(listProperty2);
//
//        //由此可以看出， listProperty1  和 listProperty2 底层维护的是一个list，这里维护的是 listProperty2
//        listProperty1.add("C");
//        listProperty2.add("D");
//
//        //list1.add("C1");
//        //list2.add("D1");
//        System.out.println(String.format("listProperty1: %s , listProperty2: %s", listProperty1.get(), listProperty2.get()));
//        System.out.println(String.format("list1: %s , list2: %s", list1, list2));


        //listProperty2的内容绑定到listproperty1上，数据不完全共享，分为两个list维护
//        listProperty1.bindContent(listProperty2);
//        listProperty1.add("C");
//        listProperty2.add("D");
//
//        //list1.add("C1");
//        //list2.add("D1");
//        System.out.println(String.format("listProperty1: %s , listProperty2: %s", listProperty1.get(), listProperty2.get()));
//        System.out.println(String.format("list1: %s , list2: %s", list1, list2));


        //listProperty1 和 listProperty2 数据共享，但是list1和list2不一样
//        listProperty1.bindBidirectional(listProperty2);
//        listProperty1.add("C");
//        listProperty2.add("D");
//
//        //list1.add("C1");
//        //list2.add("D1");
//        System.out.println(String.format("listProperty1: %s , listProperty2: %s", listProperty1.get(), listProperty2.get()));
//        System.out.println(String.format("list1: %s , list2: %s", list1, list2));

        //listProperty1 和 listProperty2 数据共享，且list1和list2也一样
        listProperty1.bindContentBidirectional(listProperty2);
        listProperty1.add("C");
        listProperty2.add("D");

        list1.add("C1");
        list2.add("D1");
        System.out.println(String.format("listProperty1: %s , listProperty2: %s", listProperty1.get(), listProperty2.get()));
        System.out.println(String.format("list1: %s , list2: %s", list1, list2));
        System.out.println(listProperty1.hashCode() == listProperty2.hashCode());
        System.out.println(list1.hashCode() == list2.hashCode());



    }


}
